A storage system is a processing system adapted to store and retrieve information/data on storage devices, such as disks. Each “on-disk” file may be implemented as a set of disk blocks configured to store information, such as text, whereas each directory may be implemented as a specially-formatted file in which information about other files and directories are stored.
The storage operating system generally refers to the computer-executable code operable on a storage system that manages data access and access requests and may implement file system semantics in implementations involving storage systems. In this sense, the Data ONTAP™ storage operating system, available from Network Appliance, Inc. of Sunnyvale, Calif., is an example of such a storage operating system implemented as a microkernel within an overall protocol stack and associated disk storage. The storage operating system can also be implemented as an application program operating over a general-purpose operating system, such as UNIX® or Windows®, or as a general-purpose operating system with configurable functionality, which is configured for storage applications as described herein.
A storage system's disk storage is typically implemented as one or more storage volumes that comprise physical storage disks, defining an overall logical arrangement of storage space. Available storage system implementations can serve a large number of discrete volumes, such as 150 or more. A storage volume is “loaded” in the storage system by copying the logical organization of the volume's files, data, and directories, into the storage system's memory. Once a volume has been loaded in memory, the volume may be “mounted” by one or more users, applications, devices, and the like, that are permitted to access its contents and navigate its namespace. As used herein, a volume is said to be “in use” when it is loaded in a storage system's memory and at least one user, application, etc., has mounted the volume and modified its contents.
A storage system may be configured to allow client systems to access the storage system. In this model, the client may comprise an application executing on a computer that “connects” to the storage system over a computer network, such as a point-to-point link, shared local area network (LAN), wide area network (WAN), or virtual private network (VPN) implemented over a public network such as the Internet. Communications between the storage system and its clients are typically implemented through transfer of protocol formatted packets sent over the computer network. Each client may request the services of the storage system by issuing file-system protocol messages/packets formatted in accordance with a conventional protocol, such as the Common Internet File System (CIFS), Network File System (NFS) protocol, or Fibre Channel Protocol (FCP).
Also, a conventional protocol used for storage systems implementing Storage Area Network (SAN) access technology is Internet Small Computer System Interface (iSCSI). In general, a computer system (e.g., storage system or client) may receive and transmit iSCSI formatted packets over a network by implementing an iSCSI subsystem software layer comprising an iSCSI socket layer and an iSCSI protocol layer. Typically, the iSCSI socket layer is implemented by the operating system of the computer system as a single-threaded layer so that data packets are processed by the iSCSI socket layer by only a single-thread at any given time. In a multi-threaded capable computer system (especially multiprocessor computer systems), implementing the iSCSI socket layer as a single-threaded layer decreases packet processing efficiency and overall network data throughput. As such, there is a need for a method of implementing the iSCSI socket layer as a multi-threaded layer to increase packet processing efficiency and overall network data throughput.